package utils

import (
	"fmt"
	"io"
	"io/ioutil"
	"log"
	"os"
	"path/filepath"
)

var (
	Trace   *log.Logger // 记录所有日志
	Info    *log.Logger // 重要的信息
	Warning *log.Logger // 需要注意的信息
	Error   *log.Logger // 非常严重的问题
)

func init() {
	procRoot, _ := filepath.Abs(filepath.Dir(os.Args[0]))
	logPath := filepath.Join(procRoot, "log")
	// logPath := "log"
	CheckPath(logPath)
	logFile := fmt.Sprintf("%s/running.log", logPath)

	file, err := os.OpenFile(logFile, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
	if err != nil {
		log.Fatalf("打开日志文件%s失败: %s\n", logFile, err)
	}

	Trace = log.New(ioutil.Discard, "", log.Ldate|log.Ltime)
	Info = log.New(io.MultiWriter(os.Stdout, file), "", log.Ldate|log.Ltime)
	Warning = log.New(io.MultiWriter(os.Stdout, file), "", log.Ldate|log.Ltime)
	Error = log.New(io.MultiWriter(file, os.Stderr), "", log.Ldate|log.Ltime)
}

func CheckPath(logPath string) {
	path, err := os.Stat(logPath)
	if err != nil {
		if os.IsNotExist(err) {
			CreatePath(logPath, 0755)
		} else {
			fmt.Println(err)
			os.Exit(1)
		}
	} else if !path.IsDir() {
		err = os.Remove(logPath)
		if err != nil {
			log.Printf("文件%s删除失败：%s", logPath, err)
			os.Exit(1)
		}
		CreatePath(logPath, 0755)
	}
}

func CreatePath(path string, perm os.FileMode) {
	err := os.MkdirAll(path, perm)
	if err != nil {
		log.Printf("目录%s创建失败：%s", path, err)
		os.Exit(1)
	}
}
